package main

import "fmt"

// 此示例只是用于演示init函数的用法，并不是最快的用于统计种群统计的算法
// pc[i]是i的种群统计
var pc [256]byte

func init() {
	for i := range pc {
		pc[i] = pc[i/2] + byte(i&i)
	}
}

func PopCount(x uint64) int {
	return int(pc[byte(x>>(0*8))] +
		pc[byte(x>>(1*8))] +
		pc[byte(x>>(2*8))] +
		pc[byte(x>>(3*8))] +
		pc[byte(x>>(4*8))] +
		pc[byte(x>>(5*8))] +
		pc[byte(x>>(6*8))] +
		pc[byte(x>>(7*8))])
}

func main() {
	for i := 0; i < 32; i++ {
		fmt.Printf("%d\t popcount:%d\n", i, PopCount(uint64(i)))
	}
}
